package com.lottery.ruok.lottrey.chat.event.listener;

import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.view.View;

import com.lottery.ruok.lottrey.activity.GiveRewardActivity;
import com.lottery.ruok.lottrey.chat.event.handler.OnConversationClickListener;
import com.lottery.ruok.lottrey.chat.model.prize.message.PrizeMessage;
import com.lottery.ruok.lottrey.chat.model.redpacket.message.sendRedPacketMessage.RedPacketMessage;
import com.lottery.ruok.lottrey.chat.utils.ChatUtils;
import com.lottery.ruok.lottrey.common.Common;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import io.rong.imkit.RongIM;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.MessageContent;
import io.rong.imlib.model.UserInfo;
import utils.Utils;

/**
 * 会话操作
 */
public class ChatEventConversationClickListener implements RongIM.ConversationClickListener {

    private static List<OnConversationClickListener> onConversationClickListeners = new ArrayList<>();

    private static ChatEventConversationClickListener chatEventConversationClickListener;

    public static synchronized ChatEventConversationClickListener getIntance() {
        if (chatEventConversationClickListener == null) {
            chatEventConversationClickListener = new ChatEventConversationClickListener();
        }
        return chatEventConversationClickListener;
    }

    /**
     * 当点击用户头像后执行。
     *
     * @param context          上下文。
     * @param conversationType 会话类型。
     * @param user             被点击的用户的信息。
     * @param targetId         会话 id
     * @return 如果用户自己处理了点击后的逻辑处理，则返回 true，否则返回 false，false 走融云默认处理方式。
     */
    @Override
    public boolean onUserPortraitClick(Context context, Conversation.ConversationType conversationType, UserInfo user, String targetId) {
        switch (conversationType) {
            case CHATROOM:
                if(TextUtils.isEmpty(com.lottery.ruok.lottrey.userInfo.UserInfo.getToken())){
                    Utils.showToast("未登录,不能打赏");
                }else if (com.lottery.ruok.lottrey.userInfo.UserInfo.getIsTest() == 1 && com.lottery.ruok.lottrey.userInfo.UserInfo.getIsTry() != 1) {
                    Utils.showToast(Common.IS_TEST);
                }else{
                    if (!ChatUtils.isMySelf(user.getName())) {
                        //大赏
                        sendPrize(context, conversationType, user, targetId);
                        return true;
                    }
                }
                break;
            case PRIVATE:
                if(TextUtils.isEmpty(com.lottery.ruok.lottrey.userInfo.UserInfo.getToken())){
                    Utils.showToast("未登录,不能打赏");
                }else if (com.lottery.ruok.lottrey.userInfo.UserInfo.getIsTest() == 1 && com.lottery.ruok.lottrey.userInfo.UserInfo.getIsTry() != 1) {
                    Utils.showToast(Common.IS_TEST);
                }else{
                    if (!ChatUtils.isMySelf(user.getName())) {
                        //大赏
                        sendPrize(context, conversationType, user, targetId);
                        return true;
                    }
                }
                break;
        }
        return true;
    }


    /**
     * 当长按用户头像后执行。
     *
     * @param context          上下文。
     * @param conversationType 会话类型。
     * @param user             被点击的用户的信息。
     * @param targetId         会话 id
     * @return 如果用户自己处理了点击后的逻辑处理，则返回 true，否则返回 false，false 走融云默认处理方式。
     */
    @Override
    public boolean onUserPortraitLongClick(Context context, Conversation.ConversationType conversationType, UserInfo user, String targetId) {
        return false;
    }

    /**
     * 当点击消息时执行。
     *
     * @param context 上下文。
     * @param view    触发点击的 View。
     * @param message 被点击的消息的实体信息。
     * @return 如果用户自己处理了点击后的逻辑处理，则返回 true， 否则返回 false, false 走融云默认处理方式。
     */
    @Override
    public boolean onMessageClick(Context context, View view, Message message) {
        MessageContent content = message.getContent();
        if (content instanceof RedPacketMessage) {
            receiveRedPacket(context, view, (RedPacketMessage) content, message);
            return true;
        } else if (content instanceof PrizeMessage) {
            showPrizeDetail(context, view, (PrizeMessage) content, message);
            return true;
        }
        return false;
    }


    /**
     * 当点击链接消息时执行。
     *
     * @param context 上下文。
     * @param link    被点击的链接。
     * @param message 被点击的消息的实体信息
     * @return 如果用户自己处理了点击后的逻辑处理，则返回 true， 否则返回 false, false 走融云默认处理方式。
     */
    @Override
    public boolean onMessageLinkClick(Context context, String link, Message message) {
        return false;
    }

    /**
     * 当长按消息时执行。
     *
     * @param context 上下文。
     * @param view    触发点击的 View。
     * @param message 被长按的消息的实体信息。
     * @return 如果用户自己处理了长按后的逻辑处理，则返回 true，否则返回 false，false 走融云默认处理方式。
     */
    @Override
    public boolean onMessageLongClick(Context context, View view, Message message) {
        return false;
    }

    private void gotoGivePrize(Context context, UserInfo userInfo) {

        Intent intent = new Intent(context, GiveRewardActivity.class);
        intent.putExtra("avatar", userInfo.getPortraitUri() == null ? "" : userInfo.getPortraitUri().toString());
        intent.putExtra("user", userInfo.getUserId());
        context.startActivity(intent);
    }

    public void registerOnConversationClickListener(OnConversationClickListener onConversationClickListener) {
        if (onConversationClickListener == null) {
            return;
        }
        onConversationClickListeners.add(onConversationClickListener);
    }

    public void unRegisterOnConversationClickListener(OnConversationClickListener onConversationClickListener) {
        if (onConversationClickListener == null) {
            return;
        }
        onConversationClickListeners.remove(onConversationClickListener);
    }

    /**
     * 大赏
     *
     * @param context
     * @param conversationType
     * @param user
     * @param targetId
     */
    private void sendPrize(Context context, Conversation.ConversationType conversationType, UserInfo user, String targetId) {
        if (onConversationClickListeners != null) {
            Iterator<OnConversationClickListener> iterator = onConversationClickListeners.iterator();
            while (iterator.hasNext()) {
                OnConversationClickListener next = iterator.next();
                if (next != null) {
                    next.onSendPrize(context, conversationType, user, targetId);
                }
            }
        }

    }

    /**
     * 抢红包
     *
     * @param context
     * @param view
     * @param content
     * @param message
     */
    private void receiveRedPacket(Context context, View view, RedPacketMessage content, Message message) {
        if (onConversationClickListeners != null) {
            Iterator<OnConversationClickListener> iterator = onConversationClickListeners.iterator();
            while (iterator.hasNext()) {
                OnConversationClickListener next = iterator.next();
                if (next != null) {
                    next.onReceiveRedPacket(context, view, content, message);
                }
            }
        }
    }

    /**
     * 查看大赏详情
     *
     * @param context
     * @param view
     * @param content
     * @param message
     */
    private void showPrizeDetail(Context context, View view, PrizeMessage content, Message message) {
        if (onConversationClickListeners != null) {
            Iterator<OnConversationClickListener> iterator = onConversationClickListeners.iterator();
            while (iterator.hasNext()) {
                OnConversationClickListener next = iterator.next();
                if (next != null) {
                    next.showPrizeDetail(context, view, content, message);
                }
            }
        }
    }
}